<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="../../vue.js"></script>
  </head>
  <body>
    <div id="app">
      <App></App>
    </div>
    <script>
      Vue.config.productionTip = false;

      /* 
                创建组件：
                    * Vue.extend(options):
                        - options的写法和new Vue时的options写法类似，只是没有el选项，因为只有vm决定服务器哪一个容器，而组件都是基于vm的
                        - 我们希望给每一个组件都添加一个name配置项，代表当前组件的名称，目前的作用是为了在开发者工具区分组件
                        - Vue.extend返回一个Vuecomponent构造函数，每次组件在使用的时候，都会被实例化，得到一个组件实例
                        - 组件的模板有且只能有一个根元素
                        
                组件的使用：
                    * 首先创建一个组件，得到一个Vuecomponent构造函数
                    * 要在父组件中或者vm实例中进行注册，才可以使用，需要使用components配置项进行注册
                    * 在模板中通过标签的方法使用组件，单双标签都可以(在非单位组件中，组件尽量写成双标签)
            */

      const App = Vue.extend({
        name: "APP",
        template: `<h1>App{{message}}</h1>`,
        data() {
          return {
            message: "hello",
          };
        },
      });
      console.log(App, "App"); //Vuecomponent构造函数

      const vm = Vue({
        el: "#app",
        components: {
          App,
        },
        data() {
          return {};
        },
      });
    </script>
  </body>
</html>
